//假设有一个很长的花坛，一部分地块种植了花，另一部分却没有。可是，花不能种植在相邻的地块上，它们会争夺水源，两者都会死去。
//
// 给你一个整数数组 flowerbed 表示花坛，由若干 0 和 1 组成，其中 0 表示没种植花，1 表示种植了花。另有一个数 n ，能否在不打破种植规则
//的情况下种入 n 朵花？能则返回 true ，不能则返回 false 。
//
//
//
// 示例 1：
//
//
//输入：flowerbed = [1,0,0,0,1], n = 1
//输出：true
//
//
// 示例 2：
//
//
//输入：flowerbed = [1,0,0,0,1], n = 2
//输出：false
//
//
//
//
// 提示：
//
//
// 1 <= flowerbed.length <= 2 * 10⁴
// flowerbed[i] 为 0 或 1
// flowerbed 中不存在相邻的两朵花
// 0 <= n <= flowerbed.length
//
//
// Related Topics 贪心 数组 👍 695 👎 0

package leetcode.editor.cn;
//java:种花问题
public class Q0605CanPlaceFlowers {
    public static void main(String[] args){
        Solution solution = new Q0605CanPlaceFlowers().new Solution();
    }
    //leetcode submit region begin(Prohibit modification and deletion)
class Solution {
    public boolean canPlaceFlowers(int[] flowerbed, int n) {
        // l 为 -1，默认添加一个0元素
        int l = -1, r = 0, count = 0;
        while (r < flowerbed.length) {
            int rV = flowerbed[r];
            // 如果遇到1，左指针跳到下一个位置，右指针遍历下一个位置
            if (rV == 1) {
                l = r + 1;
            }
            // 滑动窗口大小设置为3
            if (r - l == 2) {
                count++;
                l = r;
            }
            if (count >= n) return true;
            r++;
        }
        // r 此时为flowerbed.length, 默认添加一个零，进行一次判定
        if (r - l == 2) {
            count++;
        }
        return count >= n;
    }

}
//leetcode submit region end(Prohibit modification and deletion)

}